package controler;

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import GameObjs.ElementType;
import GameObjs.GameObject;
import loader.GameLoader;
import manager.ElementManager;

/**
 * 
 * @author crd
 * @说明 此类为实现键盘监听类，以下各个函数皆为实现接口所需实现函数
 *
 */

public class GameListener implements KeyListener,MouseListener,MouseMotionListener {
	
	//87 w 83s 65 a 68d 
	private Set<Integer> set=new HashSet<Integer>();
	public ElementManager em =ElementManager.get();
	/**
	 * 鼠标拖动
	 */
	@Override
	public void mouseDragged(MouseEvent e) {
		
	}

	@Override
	public void mouseMoved(MouseEvent e) {
		//System.out.println(e.getX()+" "+e.getY());
		GameLoader.shux=e.getX();
		GameLoader.shuy=e.getY();
	}

	@Override
	public void mouseClicked(MouseEvent e) {
		// TODO 自动生成的方法存根
		//System.out.println("鼠标click");
		
	}

	@Override
	public void mousePressed(MouseEvent e) {
		// TODO 自动生成的方法存根
		List<GameObject> player = em.getList(ElementType.PLAYER);
		for(GameObject obj:player) {
			obj.mouse(true);
		}
	}

	@Override
	public void mouseReleased(MouseEvent e) {
		// TODO 自动生成的方法存根
		List<GameObject> player = em.getList(ElementType.PLAYER);
		for(GameObject obj:player) {
			obj.mouse(false);
		}
	}

	@Override
	public void mouseEntered(MouseEvent e) {
		// TODO 自动生成的方法存根
		
	}

	@Override
	public void mouseExited(MouseEvent e) {
		// TODO 自动生成的方法存根
		
	}

	@Override
	public void keyTyped(KeyEvent e) {
		// TODO 自动生成的方法存根
		
	}

	@Override
	public void keyPressed(KeyEvent e) {
		// TODO 自动生成的方法存根
		int key=e.getKeyCode();
		System.out.println(key+"按下");
		if(set.contains(key)) { //判定集合中是否已经存在,包含这个对象
//			如果包含直接结束方法
			return;
		}
		set.add(key);
		List<GameObject> player = em.getList(ElementType.PLAYER);
		for(GameObject obj:player) {
			obj.keypress(key,true);
		}
	}

	@Override
	public void keyReleased(KeyEvent e) {
		// TODO 自动生成的方法存根
		int key=e.getKeyCode();
		if(!set.contains(e.getKeyCode())) {//如果这个不存在，就停止
			return;
		}//存在(已经按过这个案件)
		set.remove(e.getKeyCode());//移除数据
		List<GameObject> player = em.getList(ElementType.PLAYER);
		for(GameObject obj:player) {
			obj.keypress(key,false);
		}
	}

}
